package br.com.droid;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import br.com.droid.model.Usuario;

public class BancoUsuario {

	private static BancoUsuario instance;
	private ArrayList<Usuario> listaUsuarios;

	public BancoUsuario() {
		listaUsuarios = new ArrayList<Usuario>();
	}

	public static BancoUsuario getBancoInstance() {
		if (instance == null)
			instance = new BancoUsuario();
		return instance;
	}

	public Usuario buscarUsuario(long id) {
		Usuario usuario = null;
		String teste = "SELECT * from Usuario where id = +" + id + ";";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				while (rs.next()) {
					usuario = new Usuario();
					usuario.setId(rs.getLong("id"));
					usuario.setCPF(rs.getString("cpf"));
					usuario.setNome(rs.getString("nome"));
					usuario.setEmail(rs.getString("email"));
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuario.setImei(rs.getString("imei"));
					usuario.setNum_telefone(rs.getString("num_telefone"));
					usuario.setLastmodified(rs.getString("lastmodified"));
				}
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return usuario;
	}
	
	public Usuario buscarUsuario(String login) {
		Usuario usuario = null;
		String teste = "SELECT * from Usuario where login = +'" + login + "';";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				while (rs.next()) {
					usuario = new Usuario();
					usuario.setId(rs.getLong("id"));
					usuario.setCPF(rs.getString("cpf"));
					usuario.setNome(rs.getString("nome"));
					usuario.setEmail(rs.getString("email"));
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuario.setImei(rs.getString("imei"));
					usuario.setNum_telefone(rs.getString("num_telefone"));
					usuario.setLastmodified(rs.getString("lastmodified"));
				}
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return usuario;
	}
	
	public int autentica_usuario(String login, String senha) {
		int quantidade = 0;
		String teste = "SELECT * from Usuario where login = +'" + login + "' and senha = '"+ senha +"';";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				if(rs.first()){
					quantidade = 1;
				}				
				ConexaoMySQL.FecharConexao();				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return quantidade;
	}

	public ArrayList<Usuario> getListaUsuarios() {
		String teste = "SELECT * from Usuario;";
		listaUsuarios.clear();

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				while (rs.next()) {
					Usuario usuario = new Usuario();
					usuario.setId(rs.getLong("id"));
					usuario.setCPF(rs.getString("cpf"));
					usuario.setNome(rs.getString("nome"));
					usuario.setEmail(rs.getString("email"));
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuario.setImei(rs.getString("imei"));
					usuario.setNum_telefone(rs.getString("num_telefone"));
					usuario.setLastmodified(rs.getString("lastmodified"));
					listaUsuarios.add(usuario);
				}
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return listaUsuarios;
	}

	public int inserirUsuario(Usuario usuario) {
		
		int id = 0;
		
		String teste = "INSERT into Usuario(nome, cpf, email, login, senha, imei, num_telefone) values ('"
				+ usuario.getNome()
				+ "', '"
				+ usuario.getCPF()
				+ "', '"
				+ usuario.getEmail()
				+ "', '"
				+ usuario.getLogin()
				+ "', '"
				+ usuario.getSenha()
				+ "', '"
				+ usuario.getImei()
				+ "', '"
				+ usuario.getNum_telefone() 
				+ "');";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				stm.executeUpdate(teste, Statement.RETURN_GENERATED_KEYS);
				ResultSet rs = stm.getGeneratedKeys();
				if (rs.next()) {
					id = rs.getInt(1);
				}
				rs.close();
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return id;
	}

	public String atualizar(Usuario usuario) {
		String teste = "update usuario set nome ='" + usuario.getNome()
				+ "', email = '" + usuario.getEmail() + "', num_telefone = '"
				+ usuario.getNum_telefone() + "', senha = '"
				+ usuario.getSenha() + "' where id=" + usuario.getId() + ";";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				stm.executeUpdate(teste);
				ConexaoMySQL.FecharConexao();
				return "Usuario atualizado no banco com sucesso!";
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return "Erro ao atualizar o usuario!";
	}

	public String deletarUsuario(int id) {
		String teste = "DELETE from Usuario where id = " + id + ";";

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				stm.executeUpdate(teste);
				ConexaoMySQL.FecharConexao();
				return "Usuario deletado no banco com sucesso!";
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return "Erro ao inserir o usuario!";
	}
	
	public ArrayList<Usuario> listarUsuariosNaoSincronizados(String data) {

		String teste = "SELECT * from Usuario where lastmodified > '"+data+"';";
		listaUsuarios.clear();

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				while (rs.next()) {
					Usuario usuario = new Usuario();
					usuario.setId(rs.getLong("id"));
					usuario.setCPF(rs.getString("cpf"));
					usuario.setNome(rs.getString("nome"));
					usuario.setEmail(rs.getString("email"));
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuario.setImei(rs.getString("imei"));
					usuario.setNum_telefone(rs.getString("num_telefone"));
					usuario.setLastmodified(rs.getString("lastmodified"));
					listaUsuarios.add(usuario);
				}
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return listaUsuarios;
	}
	
	public ArrayList<Usuario> listarUsuarios() {

		String teste = "SELECT * from Usuario;";
		listaUsuarios.clear();

		if (ConexaoMySQL.getConexaoMySQL() != null) {
			Statement stm;
			try {
				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
				ResultSet rs = stm.executeQuery(teste);
				while (rs.next()) {
					Usuario usuario = new Usuario();
					usuario.setId(rs.getLong("id"));
					usuario.setCPF(rs.getString("cpf"));
					usuario.setNome(rs.getString("nome"));
					usuario.setEmail(rs.getString("email"));
					usuario.setLogin(rs.getString("login"));
					usuario.setSenha(rs.getString("senha"));
					usuario.setImei(rs.getString("imei"));
					usuario.setNum_telefone(rs.getString("num_telefone"));
					usuario.setLastmodified(rs.getString("lastmodified"));
					listaUsuarios.add(usuario);
				}
				ConexaoMySQL.FecharConexao();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return listaUsuarios;
	}
	
}
